<?php
App::uses('AppController', 'Controller');
App::uses('CakeEmail', 'Network/Email');
/**
 * Emprestimos Controller
 *
 * @property Emprestimo $Emprestimo
 */
class EmprestimosController extends AppController {

	public $paginate = array();
	
	// helper method to redirect query to named
	// http://foo.com/foos/index/?q=x&blah=y to
	// http://foo.com/foos/index/q:x/blah:y
	function _redirectQueryToNamed($whitelist_param_names = null)
	{
		$query_strings = array();
		if (is_array($whitelist_param_names)) {
			foreach($whitelist_param_names as $param_name) {
				if (!empty($this->params['url'][$param_name])) { //
					$query_strings[$param_name] = $this->params['url'][$param_name];
				}
			}
		} else {
			$query_strings = $this->params['url'];
			unset($query_strings['url']['url']); // Crazy, Remember:
        }
        if (!empty($query_strings)) {
       		$query_strings = am($this->params['named'], $query_strings);
            $this->redirect($query_strings, null, true);
		}
	}

    function index2()
    {
    	$this->_redirectQueryToNamed();
    }
        
/**
 * index method
 *
 * @return void
 */
	public function index() {
		
		$this->paginate['order'] = 'Emprestimo.id DESC';
		$this->paginate['conditions'] = array();
		
		if ($this->request->is('post')) {
			$this->_redirectToNamedUrl();
		}
		
		if (!empty($this->params['named']['projeto_id'])) {
			$this->paginate['conditions'] = array_merge($this->paginate['conditions'], array('Emprestimo.projeto_id' => $this->params['named']['projeto_id']));
			$this->request->data['Filter']['projeto_id'] = $this->params['named']['projeto_id'];
		}
		if (!empty($this->params['named']['autorizador_id'])) {
			$this->paginate['conditions'] = array_merge($this->paginate['conditions'], array('Emprestimo.autorizador_id' => $this->params['named']['autorizador_id']));
			$this->request->data['Filter']['autorizador_id'] = $this->params['named']['autorizador_id'];
		}
		if (!empty($this->params['named']['aluno_id'])) {
			$this->paginate['conditions'] = array_merge($this->paginate['conditions'], array('Emprestimo.aluno_id' => $this->params['named']['aluno_id']));
			$this->request->data['Filter']['aluno_id'] = $this->params['named']['aluno_id'];
		}
		if (!empty($this->params['named']['situacao'])) {
			$this->paginate['conditions'] = array_merge($this->paginate['conditions'], array('Emprestimo.situacao' => $this->params['named']['situacao']));
			$this->request->data['Filter']['situacao'] = $this->params['named']['situacao'];
		}
		if (!empty($this->params['named']['data_inicio']) && !empty($this->params['named']['data_entrega'])) {
			$this->paginate['conditions'] = array_merge($this->paginate['conditions'], array('date(Emprestimo.created) BETWEEN ? AND ?' => array($this->params['named']['data_inicio'], $this->params['named']['data_entrega'])));
			$this->request->data['Filter']['data_inicio'] = $this->params['named']['data_inicio'];
			$this->request->data['Filter']['data_entrega'] = $this->params['named']['data_entrega'];
		}
		
		$projetos = $this->Emprestimo->Projeto->find('list');
		$alunos = $this->Emprestimo->Aluno->find('list');
		$autorizadors = $this->Emprestimo->Autorizador->find('list');
		$situacaos = $this->Emprestimo->situacaos;
		$this->Emprestimo->recursive = 0;
		$this->set('emprestimos', $this->paginate());
		$this->set(compact('projetos', 'alunos', 'autorizadors', 'situacaos', 'emprestimos'));
	}

/**
 * view method
 *
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		$this->Emprestimo->id = $id;
		if (!$this->Emprestimo->exists()) {
			throw new NotFoundException(__('Invalid emprestimo'));
		}
		$this->set('emprestimo', $this->Emprestimo->read(null, $id));
	}

/**
 * add method
 *
 * @return void
 */
	public function add() {
		
		if ($this->request->is('post')) {
			$this->request->data['Emprestimo'] += array('situacao' => 'A');
			$this->Emprestimo->create();
			if ($this->Emprestimo->save($this->request->data)) {
				$this->Session->setFlash(__('O empréstimo foi criado com sucesso.'), 'flash_success');
				$this->redirect(array('action' => 'edit', $this->Emprestimo->getInsertID()));
			} else {
				if (empty($this->Emprestimo->validationErrors)) {
					$this->Session->setFlash(__('Não foi possível criar o empréstimo. Por favor, tente novamente.'), 'flash_error');
				}
			}
		}
		
		$projetos = $this->Emprestimo->Projeto->find('list');
		$alunos = $this->Emprestimo->Aluno->find('list');
		$autorizadors = $this->Emprestimo->Autorizador->find('list');
		$usuarios = $this->Emprestimo->Usuario->find('list');
		$this->set(compact('projetos', 'alunos', 'autorizadors'));
	}

/**
 * edit method
 *
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		$this->Emprestimo->id = $id;
		if (!$this->Emprestimo->exists()) {
			throw new NotFoundException(__('Invalid emprestimo'));
		}
		
		if ($this->request->is('post') || $this->request->is('put')) {
			
			switch ($this->request->data['Emprestimo']['submit'])
			{
				case 'complete':
					$this->request->data['Emprestimo'] += array('situacao' => 'E');
					if ($this->Emprestimo->save($this->request->data)) {
						
						$this->Emprestimo->recursive = 1;
						$emprestimo = $this->Emprestimo->read(null, $this->Emprestimo->getID());
						$this->set('emprestimo', $emprestimo);
						
						//Envio de Email para aluno e professor
						$email = new CakeEmail();
						$email->config('gmail')
							->to(array(
									$emprestimo['Aluno']['email'] => $emprestimo['Aluno']['nome'], 
									$emprestimo['Autorizador']['email'] => $emprestimo['Autorizador']['nome']
								)
							)
							->subject('[' . Configure::read('Sigem.name') . '] Notificação de Empréstimo')
							->emailFormat('html')
							->template('emprestimo')
							->viewVars($this->viewVars)
							->send();
							
						$this->Session->setFlash(__('O empréstimo Nº ' . $this->request->data['Emprestimo']['id'] . ' foi concluído com sucesso.'), 'flash_success');
						$this->redirect(array('action' => 'cautela', $this->Emprestimo->getID()));
						
					} else {
						$this->Session->setFlash(__('Não foi possível concluir empréstimo Nº ' . $this->request->data['Emprestimo']['id'] . '. Por favor, tente novamente.'), 'flash_error');
					}
					break;
					
				case 'item_add':
					
					if ($this->Emprestimo->saveAssociated($this->request->data, array('fieldList' => array('emprestimo_id','equipamento_id', 'quantidade')))) {
						$this->Session->setFlash(__('O equipamento foi adicionado com sucesso.'), 'flash_success');
						$this->redirect(array('action' => 'edit', $this->Emprestimo->getID()));
					} else {
						if (empty($this->Emprestimo->validationErrors)) {
							$this->Session->setFlash(__('Não foi possível adicionar equipamento. Por favor, tente novamente.'), 'flash_error');
						}
					}
					break;
			}
			
		} 
		
		$this->Emprestimo->recursive = 0;
		$this->request->data = $this->Emprestimo->read(null, $id);
		// Busca todos os itens do empréstimo
		$this->Emprestimo->Itensemprestimo->recursive = 2;
		$itens_emprestimos = $this->Emprestimo->Itensemprestimo->findAllByEmprestimoId($id);
		
		$projetos = $this->Emprestimo->Projeto->find('list');
		$alunos = $this->Emprestimo->Aluno->find('list');
		$autorizadors = $this->Emprestimo->Autorizador->find('list');
		$equipamentos = $this->Emprestimo->Itensemprestimo->Equipamento->find('list');
		$this->set(compact('projetos', 'alunos', 'autorizadors', 'equipamentos', 'itens_emprestimos'));
	}

/**
 * delete method
 *
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		if (!$this->request->is('post')) {
			throw new MethodNotAllowedException();
		}
		$this->Emprestimo->id = $id;
		if (!$this->Emprestimo->exists()) {
			throw new NotFoundException(__('Invalid emprestimo'));
		}
		if ($this->Emprestimo->delete()) {
			$this->Session->setFlash(__('Emprestimo deleted'));
			$this->redirect(array('action' => 'index'));
		}
		$this->Session->setFlash(__('Emprestimo was not deleted'));
		$this->redirect(array('action' => 'index'));
	}


/**
 * Generate pdf file cautela
 * 
 * @param string $id
 * @return void
 * @throws NotFoundException
 * 
 */
	public function cautela($id = null) {
		$this->Emprestimo->id = $id;
		if (!$this->Emprestimo->exists()) {
			throw new NotFoundException(__('Empréstimo inválido'));
		}
		
		$this->Emprestimo->recursive = 2;
		$emprestimo = $this->Emprestimo->read(null, $id);
		$this->set(compact('emprestimo'));
		
		$this->layout = 'pdf';
		$this->render();
	}
	

	public function devolucao($id = null) {
		if ($this->request->is('post') || $this->request->is('put')) {
			$this->request->data['Emprestimo']['data_devolucao'] = date('Y-m-d', time());
			$this->request->data['Emprestimo']['situacao'] = 'F';
			if ($this->Emprestimo->save($this->request->data, false)) {
				$this->Session->setFlash(__('Devolução realizada com sucesso.'), 'flash_success');
				$this->Emprestimo->recursive = 2;
				$data = $this->Emprestimo->read(null, $this->Emprestimo->id);
				//Envio de Email para aluno e professor
				$email = new CakeEmail();
				$email->viewVars(array('data' => $data));
				$email->config('gmail')
				->template('devolucao')
				->emailFormat('html')
				->from(array('sigem@icomp.ufam.edu.br' => 'SIGEM'))
				->subject('[SIGEM] - Notificação de Devolução');
				$email->to($data['Autorizador']['email']);			
				$email->send();
				$email->to($data['Aluno']['email']);
				$email->send();
				$this->redirect(array('controller' => 'pages', 'action' => 'sucesso'));
			} else {
				$this->Session->setFlash(__('Um erro ocorreu durante a operação. Por favor, tente novamente.'), 'flash_error');
			}
		} else {
			$this->Emprestimo->id = $id;
			if (!$this->Emprestimo->exists()) {
				throw new NotFoundException(__('empréstimo Inválido '));
			}
				
			$this->Emprestimo->recursive = 2;
			$this->request->data = $this->Emprestimo->read(null, $id);
		}
		
	}
	
	
	public function renovacao($id = null) {
		if ($this->request->is('post') || $this->request->is('put')) {			
			if($this->request->data['Emprestimo']['nova_data_entrega'] <= $this->request->data['Emprestimo']['data_entrega']){
				$this->Session->setFlash(__('Data de Renovação deve ser posterior a data prevista atual'));
				return;
			}
			$this->request->data['Emprestimo']['situacao'] = 'E';
			$this->request->data['Emprestimo']['data_entrega'] = $this->request->data['Emprestimo']['nova_data_entrega'];
			if ($this->Emprestimo->save($this->request->data, false)) {
				$this->Session->setFlash(__('Renovação realizada com sucesso.'));
				$this->Emprestimo->recursive = 2;
				$data = $this->Emprestimo->read(null, $this->Emprestimo->id);
				//Envio de Email para aluno e professor
				$email = new CakeEmail();
				$email->viewVars(array('data' => $data));
				$email->config('gmail')
				->template('renovacao')
				->emailFormat('html')
				->from(array('sigem@icomp.ufam.edu.br' => 'SIGEM'))
				->subject('[SIGEM] - Notificação de Renovação de empréstimo');
				$email->to($data['Autorizador']['email']);
				$email->send();
				$email->to($data['Aluno']['email']);
				$email->send();
				$this->redirect(array('controller' => 'pages', 'action' => 'sucesso'));
			} else {
				$this->Session->setFlash(__('Um erro ocorreu durante a operação. Por favor, tente novamente.'));
			}
		} else {
			$this->Emprestimo->id = $id;
			if (!$this->Emprestimo->exists()) {
				throw new NotFoundException(__('empréstimo Inválido '));
			}
	
			$this->Emprestimo->recursive = 2;
			$this->request->data = $this->Emprestimo->read(null, $id);
		}
	
	}	
	
	public function beforeFilter() {
		if ($this->request->is('post')  || $this->request->is('put')) {
			if (isset($this->request->data['Emprestimo']['data_inicio']) || isset($this->request->data['Emprestimo']['data_entrega'])) {
				$this->request->data['Emprestimo'] = array_merge($this->request->data['Emprestimo'], array(
						'data_inicio' => (!empty($this->request->data['Emprestimo']['data_inicio'])) ? implode('-', array_reverse(explode('/', $this->request->data['Emprestimo']['data_inicio']))) : '',
						'data_entrega' => (!empty($this->request->data['Emprestimo']['data_entrega'])) ? implode('-', array_reverse(explode('/', $this->request->data['Emprestimo']['data_entrega']))) : ''
					)
				);
			}
			if (isset($this->request->data['Filter']['data_inicio']) || isset($this->request->data['Filter']['data_entrega'])) {
				$this->request->data['Filter'] = array_merge($this->request->data['Filter'], array(
						'data_inicio' => (!empty($this->request->data['Filter']['data_inicio'])) ? implode('-', array_reverse(explode('/', $this->request->data['Filter']['data_inicio']))) : '',
						'data_entrega' => (!empty($this->request->data['Filter']['data_entrega'])) ? implode('-', array_reverse(explode('/', $this->request->data['Filter']['data_entrega']))) : ''
					)
				);
			}
		}
	}
	
}
